package com.zackeus.xupdate.factory.impl;

import androidx.annotation.NonNull;

import com.zackeus.common.utils.NetworkUtils;
import com.zackeus.common.utils.ObjectUtils;
import com.zackeus.xupdate.XUpdate;
import com.zackeus.xupdate.constant.Error;
import com.zackeus.xupdate.entity.LibraryUpdateEntity;
import com.zackeus.xupdate.entity.UpdateError;
import com.zackeus.xupdate.factory.IUpdateChecker;


/**
 * 默认检查器
 * @name: DefaultUpdateChecker
 * @author: zz
 * @date: 2022/11/18
 */
public class DefaultUpdateChecker implements IUpdateChecker {

    public boolean beforeCheck(boolean wifiOnly) {
        if (wifiOnly && !NetworkUtils.isWifi()) {
            XUpdate.with().onUpdateError(new UpdateError(Error.CHECK_NO_WIFI));
            return Boolean.FALSE;
        }

        if (!NetworkUtils.isNetworkAvailable()) {
            XUpdate.with().onUpdateError(new UpdateError(Error.CHECK_NO_NETWORK));
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    @Override
    public boolean checkVersion(@NonNull LibraryUpdateEntity entity, boolean wifiOnly) {
        if (!this.beforeCheck(wifiOnly)) {
            return Boolean.FALSE;
        }

        // TODO: 2022/11/18 检查url状态
        // TODO: 2022/11/18 设置url状态

        if (ObjectUtils.isEmpty(entity)) {
            XUpdate.with().onUpdateError(new UpdateError(Error.CHECK_PARSE));
            return Boolean.FALSE;
        }

        if (!entity.isHasUpdate()) {
            /* 没有版本需要更新 */
            XUpdate.with().onUpdateError(new UpdateError(Error.CHECK_NO_NEW_VERSION));
            return Boolean.FALSE;
        }

        /* 校验是否是已忽略版本 */
        if (entity.isIgnorable() && XUpdate.with().isIgnoreVersion(entity.getVersionName())) {
            XUpdate.with().onUpdateError(new UpdateError(Error.CHECK_IGNORED_VERSION));
            return Boolean.FALSE;
        }

        return Boolean.TRUE;
    }
}
